package com.softtown.modules.organization.service;

import com.github.pagehelper.PageInfo;
import com.softtown.common.service.BaseService;
import com.softtown.common.utils.Result;
import com.softtown.modules.organization.dto.*;
import com.softtown.modules.organization.entity.CompOrgEmplEntity;
import com.softtown.modules.organization.entity.CompOrgHstEmplEntity;
import com.softtown.modules.organization.vo.*;
import com.softtown.modules.sys.dto.SysUserDTO;
import com.softtown.modules.sys.vo.SysUserVO;

import java.util.List;

/**
 * @author: Dingyayong
 * @Date: 2019/6/4 10:59
 * @Description:
 */
public interface CompOrgEmplService extends BaseService<CompOrgEmplEntity> {

    /**
     * 删除员工
     * @param userId
     * @param compId
     * @return void
     * @Author fuming
     * @Date 2020/5/26 16:39
     */
    void deleteEmpl(Long userId, Long compId);

    /**
     * 查找员工-用户信息
     * @param emplId
     * @param compId
     * @return com.softtown.modules.sys.vo.SysUserVO
     * @Author fuming
     * @Date 2020/5/26 16:40
     */
    SysUserVO findEmplUser(Long emplId, Long compId);

    /**
     * 根据公司id，用户id 找出相应数据
     * @param compId
     * @param userId
     * @return java.util.List<java.lang.Long>
     * @Author fuming
     * @Date 2020/5/26 16:40
     */
    List<Long> findEmplUserRole(Long compId, Long userId);

    /**
     * 根据id找信息
     * @param id
     * @return com.softtown.modules.organization.entity.CompOrgEmplEntity
     * @Author fuming
     * @Date 2020/5/26 16:41
     */
    CompOrgEmplEntity findById(Long id);

    /**
     * 激活
     *
     * @param id
     * @return boolean
     * @author Dingyayong
     * @date 2019/6/23 15:41
     */
    void activeOrgEmpl(Long id);

    /**
     * 批准
     * @param sysUserDTO
     * @return void
     * @Author fuming
     * @Date 2020/5/26 16:42
     */
    void approveUserAppl(SysUserDTO sysUserDTO);

    /**
     * 根据员工ID和公司ID来查找员工表里的部门ID
     * @param id
     * @param compId
     * @return java.util.List<java.lang.Long>
     * @Author fuming
     * @Date 2020/5/26 16:42
     */
    List<Long> getDeptIdByEmplIdAndCompId(Long id, Long compId);

    /**
     * 员工履历分页
     * @param compOrgHstEmplDTO
     * @return com.github.pagehelper.PageInfo<com.softtown.modules.organization.entity.CompOrgHstEmplEntity>
     * @Author fuming
     * @Date 2020/5/26 16:42
     */
    PageInfo<CompOrgHstEmplEntity> getEmplHstListByCompId(CompOrgHstEmplDTO compOrgHstEmplDTO);

    /****
     * 根据公司id 找信息
     * @param compId compId
     * @return CompOrgEmplEntity
     */
    List<CompOrgEmplEntity> findByCompId(Long compId);


    /**
     * 查询没有收款信息的员工
     * @param compId
     * @return
     */
    List<CompOrgEmplEntity> findAllCompEmplByBene(Long compId);

    /**
     * 添加员工
     * @param compOrgEmplDTO
     * @return void
     * @Author fuming
     * @Date 2020/5/26 16:43
     */
    void addEmployee(CompOrgEmplDTO compOrgEmplDTO);

    /**
     * 员工信息修改
     * @param compOrgEmplDTO
     * @return void
     * @Author fuming
     * @Date 2020/5/26 16:43
     */
    void updateEmplInfos(CompOrgEmplDTO compOrgEmplDTO);

    /**
     * 员工删除
     * @param id
     * @return void
     * @Author fuming
     * @Date 2020/5/26 16:44
     */
    void deleteEmployee(Long id);

    /**
     * 根据id找信息
     * @param id
     * @return com.softtown.modules.organization.vo.CompOrgEmplVO
     * @Author fuming
     * @Date 2020/5/26 16:44
     */
    CompOrgEmplVO getById(Long id);

    /**
     * 员工信息查询和根据条件查询以及多表分页
     * @param compOrgEmplDTO
     * @return com.github.pagehelper.PageInfo<com.softtown.modules.organization.entity.CompOrgEmplEntity>
     * @Author fuming
     * @Date 2020/5/26 16:45
     */
    PageInfo<CompOrgEmplEntity> getEmployeeListByConditions(CompOrgEmplDTO compOrgEmplDTO);

    /**
     * 根据公司id和员工id/用户id获取员工信息
     *
     * @param compOrgEmplByCompIdUserIdDTO 员工信息DTO
     * @return com.softtown.common.utils.Result<com.softtown.modules.organization.vo.CompOrgEmplTravelAndStudyVO>
     * @Author fuming
     * @Date 2020/1/20 14:25
     */
    Result<CompOrgEmplTravelAndStudyVO> getEmplToTravlAndStudy(CompOrgEmplByCompIdUserIdDTO compOrgEmplByCompIdUserIdDTO);

    /**
     * 根据用户公司查找公司员工
     * @param compOrgEmplPageByCompIdUserIdDTO
     * @return com.github.pagehelper.PageInfo<com.softtown.modules.organization.vo.CompOrgEmplTravelAndStudyVO>
     * @Author fuming
     * @Date 2020/5/26 16:45
     */
    PageInfo<CompOrgEmplTravelAndStudyVO> getEmplListToTravlAndStudy(CompOrgEmplPageByCompIdUserIdDTO compOrgEmplPageByCompIdUserIdDTO);

    /**
     * 根据用户和公司id获取员工信息
     *
     * @param compOrgEmplByCompIdUserIdDTO
     * @return Result<CompUsersVo> getEmplInfoByUserId
     * @author Dingyayong
     * @date 2019-08-30 16:17
     */
    Result<CompOrgEmplNameVO> getEmplInfoByUserId(CompOrgEmplByCompIdUserIdDTO compOrgEmplByCompIdUserIdDTO);

    /**
     * 根据userId查询员工
     * @param compId
     * @param userId
     * @return com.softtown.modules.organization.entity.CompOrgEmplEntity
     * @Author fuming
     * @Date 2020/5/26 16:46
     */
    CompOrgEmplEntity getByUserId(Long compId, Long userId);

    /**
     * 通过公司id和员工id查出员工的部门名称信息
     *
     * @param compId
     * @param id
     * @return java.lang.String
     * @author fuming
     * @date 2019/11/9 17:21
     */
    String selectEmplDeptName(Long compId, Long id);

    /**
     * 查询公司员工信息
     *
     * @param compOrgEmplDTO 公司员工DTO
     * @return com.github.pagehelper.PageInfo<com.softtown.modules.organization.entity.CompOrgEmplEntity>
     * @author fuming
     * @date 2019/11/25 19:55
     */
    PageInfo selectEmployeeList(CompOrgEmplDTO compOrgEmplDTO);

    /**
     * 根据公司id和员工id查找员工信息
     *
     * @param compId 公司id
     * @param id     员工id
     * @return com.softtown.modules.organization.entity.CompOrgEmplEntity
     * @Author fuming
     * @Date 2020/2/4 11:18
     */
    CompOrgEmplEntity selectCompOrgEmplByCompIdAndId(Long compId, Long id);
}
